# 无标题窗口的移动及圆角处理

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QLabel
from PyQt5.QtGui import QScreen, QGuiApplication,QMouseEvent
from PyQt5.QtGui import QPainter,QPainterPath,QRegion,QPen, QColor,QBrush
from PyQt5.QtCore import QPoint,QUrl,Qt,QRect,QRectF

# from pywebview import create_window
# 不是import pywebview,而是import webview
# import webview
# from webview import create_window 
from PyQt5.QtWebEngineWidgets import QWebEngineView

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        # 设置窗口大小  
        self.resize(800, 600)  
  
        # 使窗口居中显示  
        screen = QGuiApplication.primaryScreen()  
        screen_rect = screen.geometry()  
        width, height = self.width(), self.height()  
        self.move(screen_rect.center() - QPoint(width // 2, height // 2))
        # QPoint只接受int类型，所以需要用width // 2，而width / 2得到会是float类型，导致错误
        self.hid_title_bar()
        self.radius = 20.0
        
        self.setAttribute(Qt.WA_TranslucentBackground) #因为要绘制用圆角窗体，所以先设置原窗体透明
        self.setWindowTitle("PyQt5 Desktop Widget")

        # 创建一个 QLabel  
        label = QLabel(self)  
        label.setText('Hello, World!')  
        # 设置 QLabel 的样式表  
        label.setStyleSheet("""  
            QLabel {  
                font-family: Arial;  
                font-size: 16pt;  
                font-weight: bold;  
                color: green;  
                background-color: lightgray;  
                border: 1px solid black;  
                padding: 5px;  
            }  
        """)  
  
        # 设置 QLabel 的位置和大小  
        label.move(50, 50)  # x 坐标为 50，y 坐标为 50  
        label.setFixedSize(200, 50)  # 宽度为 200，高度为 100 

    def show_round_rect(self,radius):
        painter = QPainter(self)  
        painter.setRenderHint(QPainter.Antialiasing)  
        path = QPainterPath()  
        # rect = QRect(0, 0, self.width(), self.height())  
        path.addRoundedRect(0,0,self.width(),self.height(), self.radius, self.radius)  
        # 设置画笔和画路径  
        pen = QPen(QColor(255, 255, 255), 2)   
        painter.setPen(pen) # 白色边框，宽度为2 
        painter.setBrush(QBrush(QColor(255, 255, 255)))  # 设置背景色 
        # region = QRegion(path.toFillPolygon().toPolygon())
        # self.setMask(region) #设置窗口遮罩,去掉底部背景窗体
        painter.drawPath(path) 

        # 清除掉不在path范围内的任何残留绘制  
        # 如果背景不是完全透明的，这步可能不是必需的  
        painter.setBrush(Qt.NoBrush)  
        painter.setPen(Qt.NoPen)  
        painter.drawRect(self.rect())
        
    def paintEvent(self, event):  
        self.show_round_rect(20.0)    

    def show_mask_round(self):
        # 创建一个 QPainterPath 并设置圆角  
        radius = 20.0
        path = QPainterPath()  
        # 使用QRectF，注意这里我们使用浮点数来表示坐标和大小  
        rect = QRectF(0, 0, self.width(), self.height())  
        path.addRoundedRect(rect, radius, radius)  
        # 使用 QPainterPath 创建一个 QRegion  
        region = QRegion(path.toFillPolygon().toPolygon())  
        # 设置窗口遮罩  
        self.setMask(region)

    def show_browser_area(self):
        # 创建一个QWebEngineView实例  
        self.browser = QWebEngineView()  
        # 设置WebView为中央窗口部件  
        self.setCentralWidget(self.browser)  
        # 加载百度  
        self.browser.load(QUrl("https://www.baidu.com"))

    def hid_title_bar(self):
        # 隐藏标题栏  
        self.setWindowFlags(Qt.FramelessWindowHint)   
        # 初始化鼠标拖动所需的变量  
        self.isDragging = False  
        self.dragPosition = QPoint()

    def mousePressEvent(self, event: QMouseEvent) -> None:  
        if event.button() == Qt.LeftButton:  
            self.isDragging = True  
            self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()  
            event.accept()  
  
    def mouseMoveEvent(self, event: QMouseEvent) -> None:  
        if self.isDragging and event.buttons() & Qt.LeftButton:  
            self.move(event.globalPos() - self.dragPosition)  
            event.accept()  
  
    def mouseReleaseEvent(self, event: QMouseEvent) -> None:  
        if event.button() == Qt.LeftButton and self.isDragging:  
            self.isDragging = False  
            event.accept()     

def main():
    app = QApplication(sys.argv)

    # 创建一个PyQt5窗口
    main_window = MainWindow()
    main_window.show()

    # 创建一个新窗口，并指定要加载的URL  
    # window = create_window('Baidu Search', 'https://www.baidu.com')  
    # # 保持窗口打开，直到用户关闭它  
    # webview.start()
    # # window.show() #不需要此句，也会打开web窗口
    # 请注意，pywebview库并不直接提供窗体内部的WebView控件来嵌入到现有的窗体框架中。
    # 相反，它创建了一个全新的窗口，并在这个窗口中加载WebView。
    # 但是，你可以设置这个窗口的大小和位置来使其填满整个屏幕或特定的父窗体（如果支持的话）
    # 然而，如果你使用的是像Qt、wxPython或Tkinter这样的GUI框架，
    # 并希望在其中嵌入一个WebView控件，那么你将需要使用这些框架提供的WebView控件或相关的库
    # （如Qt的QWebView或QWebEngineView，Tkinter的tkinterwebview等）。

    sys.exit(app.exec_())

if __name__ == "__main__":
    main()